Skip to main content

MC_DigitalCamSwitch_HighPrecisionを使用しています。

この例 BasicMotion_DigitalCamSwitch_HighPrecision.project はインストールディレクトリにあります。 CODESYS 下に ..\CODESYS SoftMotion\Examples

この例は、の出力を使用する方法を示しています SMC_DigitalCamSwitch_HighPrecision デジタル出力を高い時間分解能で制御します。ベッコフのEL2258端子とEL2252端子が例として使われています

注記

Beckhoffのデバイスの説明はこの例には含まれていません。これらはベンダーから直接ダウンロードして、デバイスリポジトリにインストールできます。この例を実行するには、EK1100 バスカプラー、EL2258 ターミナル、および EL2252 ターミナルが必要です

重要

この例は、EL2258のリビジョン0017およびEL2252のリビジョン0020に従って開発およびテストされました。これはあくまで一例に過ぎません。その正確性を保証するものではありません。ソースコードは使用前にテストする必要があります。必要であれば、端末の他のリビジョンに合わせて修正する必要があります

アプリケーションの構造

アプリケーションの構成は Main プログラム、 DigitalCamSwitch_EL2258 そして DigitalCamSwitch_EL2252 ファンクションブロック、およびEL2258およびEL2252出力端子を備えたEK1100バスカプラー。

ザル DigitalCamSwitch_EL2258 そして DigitalCamSwitch_EL2252 この例ではファンクションブロックが重要な部分です。の使い方を示しています Events の出力 SMC_DigitalCamSwitch_HighPrecision デジタル出力をプログラムします。ファンクションブロックは、他のハードウェアにも適用できる例として理解しておく必要があります。

DigitalCamSwitch_EL2258

. ファンクションブロックは次のように機能します。
  1. ファンクションブロックは、のライジングエッジで初期化されます Enable 入力。 STATE_INIT_0STATE_INIT_1 ステート、 OutputBufferReset EL2258 ターミナルのシグナルが書き込まれ、 aLastEventIds 配列が初期化されます。各トラックで最後に処理されたイベントの ID がこの配列に保存されます。これにより、イベントが端末に複数回転送されるのを防ぎます。

  2. 初期化後 (STATE_ACTIVE) を指定すると、すべてのトラックが順番に処理され、各トラックに対して次のロジックが実行されます。

    1. EL2258ターミナルが最後にコマンドされたイベントをすでに受け入れているかどうかを確認します(ChannelsIn[channel].OutputOrderFeedback = ChannelsOut[channel].OutputOrderCounter)。

    2. トラックのすべてのイベントをループ処理します。該当するイベントのみ ToggleEventId が最後に処理された ID よりも大きい場合は、さらに処理されたものとみなされます。(クエリ) EventId_GreaterThan(event^.ToggleEventId, aLastEventIds[channel]))

      「イベント順序に関する注意」セクションを参照してください。

    3. を変換する Duration イベントの EtherCAT タイムスタンプへの書き込みと、それに対応するイベントの書き込み ChannelsOut[channel].OutputEventStateChannelsOut[channel].OutputEventTime 出力。

    4. 最大 5 件のイベントが発生すると、処理を中止します。

    5. 少なくとも 1 つのイベントが見つかった場合は、新しいイベントが存在することを端末に通知します (ChannelsOut[channel].OutputOrderCounter := ChannelsOut[channel].OutputOrderCounter + 1)。

イベント順序に関する注意事項

イベントは、によって返されます。 SMC_DigitalCamSwitch_HighPrecision 配列内の各トラックのファンクションブロック。 SwitchNumberToggleEventId イベントごとに返されます。これ ToggleEventId はトラックごとにユニークで昇順になっています。

詳細については、以下を参照してください。 SMC_CAMSWITCH_TOGGLE_EVENT

この例では、 aLastEventIds[trackNo] 各トラックの配列には以下の内容が格納されます。 ToggleEventId 前回のファンクションブロック呼び出しで端末に最後に転送されました。 ToggleEventIds が昇順であれば、次の呼び出しでどのイベントをまだ転送する必要があるかが正確にわかります。

. 次の 2 つの詳細について検討する必要があります。
  1. どっちなのかわからないから ToggleEventId イベントが開始すると、 valid フラグは EventId に加えてデータタイプ。 EventId_GreaterThan 比較、これ valid フラグはそれに応じて考慮されます。

  2. ザル ToggleEventIds 32 ビットのデータ型である UDINT そのため、動作時間が長くなったり、スイッチング周波数が高くなったりすると、原則としてオーバーフローする可能性があります。その後、値は 2^32-1 から 0 に戻ります。比較関数です。 EventId_GreaterThan 32 ビットのオーバーフローも考慮されます。

プロッドマッピング EL2258

ザル ChannelsOutChannelsIn の出力 DigitalCamSwitch_EL2258 ファンクションブロックは EL2258 ターミナルの各 I/O チャンネルに接続されています。以下の画像はチャンネル1のマッピングを示しています。チャネル 2 も同様ですが、アクセスする場合だけです。 ChannelsOutChannelsIn インデックスは 1 ではなく 2 です。

_sm_img_mapping_el2258.png

DigitalCamSwitch_EL2252

基本原則は以下と同じです DigitalCamSwitch_EL2258。EL2252ターミナルはアクティブなイベントを 1 つしかプログラムできないため、シグナルの書き方が異なります

  1. まず、ファンクションブロックは次の式で初期化されます STATE_INIT

  2. それから STATE_CHECK_FOR_EVENT からのイベントかどうかをチェックします SMC_DigitalCamSwitch_HighPrecision ファンクションブロックは保留中です。

  3. イベントがある場合は、そのイベントを次の2サイクル以内にプログラムする必要があります。

    • 出力とEtherCATタイムスタンプは最初のサイクルで書き込まれます。 Activate 出力は 0 に設定されます。

    • 2 番目のサイクルでは、 Activate 出力は 3 インチに設定されています。 STATE_ACTIVATE_EVENT_IN_EL2252。これにより、ターミナルでイベントがアクティブになります

  4. STATE_WAIT_UNTIL_THE_INPUTS_MATCH_THE_OUTPUTSその後、システムはイベントが実行されるまで待機します。からのシグナル Feedback これには端末の入力が使用されます。

プロッドマッピング EL2252

_sm_img_mapping_el2252.png

Main

メインプログラムでは、4つのスイッチ(各トラックに2つ)が設定されています。また、トラックごとにオン/オフ補正が異なりますOnCompOffComp):

_sm_img_digitalcamswitch_highprecision.png

このプログラムには、軸の予測を有効にし、それを常に180°/s(*)で動かすために必要な関数ブロック呼び出しが含まれています。また、 SMC_DigitalCamSwitch_HighPrecisionDigitalCamSwitch_EL2258、および DigitalCamSwitch_EL2252。ムーブメントを開始する前に、フィールドバスの電源を完全にオンにする必要があります。そうしないと、イベントを端末に送信できません。

(*)例をシンプルでわかりやすくするために、一定の動きを選択しました。ただし、 SMC_DigitalCamSwitch_HighPrecision ファンクションブロックはあらゆる種類の動きに対応します。たとえば、アクセラレーションフェーズやカムを使ったときなど、正確なタイムスタンプも表示されます

コミッショニング

  1. アプリケーションをビルドし、コントローラーにダウンロードします。

  2. アプリケーションを起動します。